﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BombermanExcepciones;

namespace Bomberman
{
	[Serializable]
	public class Obstaculo : Posicionable, Representable
	{
		public const int SuperResistente = Int32.MaxValue;

		private int vida;
		private String nombre;
		private Interactuable contenido = null;
		private Casillero casilleroActual;

		public Obstaculo(int vida, string nombre = "Bloque Cemento") 
		{
			this.nombre = nombre;

			if (vida <= 0) throw new ParametrosInvalidosObstaculoException("La vida del obstaculo no puede ser 0 o menor");
			this.vida = vida;
			casilleroActual = null;
		}

		public Interactuable Contenido 
		{
			get { return contenido; }
		}

		public int Vida
		{  
			get { return this.vida; } 
		}

		public void Ocultar(Interactuable unInteractuable)
		{
			this.contenido = unInteractuable;
		}
	    
		public bool ObstruyeCamino()
		{
			return true;
		}

		// Implementacion de la interfaz Atacable
		public void RecibirAtaque(int danio)
		{
			vida = vida - danio;
			if (vida <= 0)
			{
				vida = 0;
				if (casilleroActual != null) casilleroActual.QuitarContenido(this);
				if (contenido != null) casilleroActual.AgregarArticulo(contenido);
			}
		}


		// Implementacion de la interfaz Posicionable 
		public void Posicionar(Casillero unCasillero)
		{
			casilleroActual = unCasillero;
			casilleroActual.AgregarContenido(this);
		}

		// Implementacion de la interfaz Representable
		public String ObtenerNombre()
		{
			return nombre;
		}
    }
}
